package leetcode.cn;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * @version 1.8
 * @Author Djx_hmbb
 * @Date 2023/10/10 9:48
 * @注释:179.最大数
 */
public class MaxNum {
    /*给定一组非负整数 nums，重新排列每个数的顺序（每个数不可拆分）使之组成一个最大的整数。
    注意：输出结果可能非常大，所以你需要返回一个字符串而不是整数。

    示例 1：
    输入：nums = [10,2]
    输出："210"

    示例 2：
    输入：nums = [3,30,34,5,9]
    输出："9534330"*/

    /*error*/
//    public static String largestNumber(int[] nums) {
//        int leg = nums.length;
//        for(int i = 0;i<leg-1;i++){
//            for(int j = 0;j<leg-1;j++){
//                //将排列组合大的放在前面
//                int sum1 = nums[j]*10+nums[j+1];//error--10--无法判断数字是几位的，如果是两位数就需要乘以100
//                int sum2 = nums[j+1]*10+nums[j];//error --10--无法判断数字是几位的，如果是两位数就需要乘以100
//                if(sum1<sum2){
//                    int tmp = 0;
//                    tmp = nums[j+1];
//                    nums[j+1] = nums[j];
//                    nums[j] = tmp;
//                }
//            }
//        }
//        if(nums[0] == 0)return "0";
//        StringBuffer ret = new StringBuffer();
//        for (int t : nums) {
//            ret.append(t);
//        }
////        String str = String.valueOf(nums);
//        return ret.toString();
//    }

    //最优解--
    public static String largestNumber(int[] nums) {
        int n = nums.length;//数组长度
        String[] arr = new String[n];//先建立一个字符串数组
        //将整型数组的内容全部拷贝到arr中
        for (int i = 0; i < n; i++) {
            arr[i] = "" + nums[i];
        }
        //排序
        Arrays.sort(arr, (a, b) -> {
            return (b + a).compareTo(a + b);
        });
        //提取结果
        StringBuffer str = new StringBuffer();
        for (String s : arr) {
            str.append(s);//将字符串中的数字连接起来
        }
        //返回
        if (str.charAt(0) == '0') return "0";
        return str.toString();
    }

    public static void main(String[] args) {
        int[] nums = {0, 0};
//        ArraysSortTest();//快捷键 ctrl+alt+m
//        test(nums);//测试
        String s = largestNumber(nums);
        System.out.println(s);
    }

    //test--Arrays.Sort()的测试
    public static void ArraysSortTest() {
        String[] str = {"a", "b", "c", "d", "2", "6", "8"};
        Arrays.sort(str, (a, b) -> {
            return b.compareTo(a);//比较阿斯科码值--这里是降序
        });
        for (String s :
                str) {
            System.out.println(s);
        }
    }

    //传过来的数组是可以直接改变值的
    private static void test(int[] nums) {
        nums[0] = 1;
    }
}
